package com.cskaoyan.javase.oop.basic;

/**
 * @description: 重新认识引用数据类型
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

/**
 * 通过数组已经对引用数据类型有了一定的了解
 * 回忆一下在基础语法部分我们讲过的数据类型的概念，然后思考类和数据类型是否存在关联？
 * 什么是数据类型？
 * 数据类型：表示一个数据集合和基于该数据集合的一组合法操作组成的，比如说int，有固定的取值范围，有固定的操作
 * 这里我们通过类的定义，从定义角度重新认识引用数据类型
 * 类的定义：
 *  类中包括：成员变量和成员方法
 *  属性的集合---->数据的集合
 *  行为的集合---->合法操作的集合
 *
 *  总结：定义一个类，实质上就是定义了一个新的自定义数据类型，其中，属性就是数据的集合，行为方法就是操作的集合
 *  这种数据类型就和基本数据类型不同了，这个类型是我们自定义的类型，就是引用数据类型
 *
 *  基本数据类型就不需要这个过程，因为Java的开发者已经写好了代码，jvm给基本数据类型分配空间是不需要再认识它的
 *   引用数据类型是自定义的，你想想jvm要帮助我们开辟空间，创建对象，这个时候jvm是不认识该引用类型的，它不知道怎么开辟空间，怎么创建对象。这个时候需要jvm在创建对象之前，先认识这个类
 *   这个jvm认识该类型的过程 称之为类加载  它会把java文件编译后的class文件读取到方法区当中了，这个时候方法区当中就装有这个类的全部信息，这个时候jvm就明确知道如何创建对象
 *
 *   来比较一下基本数据类型和引用数据类型的初始化
 *   int a = 1;
 *   Phone iPhone = new Phone();
 *
 *
 *
 *
 *
 */
public class Demo2 {
    public static void main(String[] args) {
        //创建手机类对象
        Phone iPhone = new Phone();
        //成员变量赋值
        iPhone.brand = "Apple";
        iPhone.price = 999;
        System.out.println(iPhone.brand);
        System.out.println(iPhone.price);
        iPhone.call();

    }

}

//手机类
class Phone {
    //定义属性
    String brand;//品牌
    double price;

    //成员方法，定义行为
    public void call() {
        System.out.println("我现在很闲，请call我！");
    }

}
